iT邦幫忙

2021 iThome 鐵人賽

DAY 1
1

那就接續著昨天的內容,今天提到的也是大家常用的function及slice

function

go在宣告function的方式如下
func <function名稱> (<引入的變數名稱> <引入的變數類別>) (<回傳變數(選填)> <回傳類別>) {
// 做一些事
}

package main

import "fmt"

func printHelloWorld() {
    fmt.Println("Hello World")
}

func printSomeThing(input1 string) {
    fmt.Println("output", input1)
}

func addSomething(input string) string {
    return input + "!!!"
}

func main() {
    printHelloWorld()
    printSomeThing("this is output")
    var x string
    x = addSomething("Good")
    fmt.Println(x)
}

但在go的function中,除了引入的變數的可以是0~很多個,輸出也可以0~很多個,範例如下

package main

import "fmt"

func swap(x string, y string) (string, string) {
	return y, x
}

func main() {
    var a string
    var b string
    a, b = swap("hello", "world")
    fmt.Println(a, b)
}


另外,在go的function中,還有一個特別的用法,可以在回傳的變數那邊先打上預設想要回傳的內容,他就會在function的最一開始幫你宣告好這幾個變數,之後只要在function中打上return即可,當然如果你接下來還是有內容想要回傳,也可以不受這個限制影響,只要型態是一樣的就可以了

package main

import "fmt"

func swap(x string, y string) (output1 string, output2 string) {
	output1 = y
    output2 = x
    if x == "foo" {
        return "bar", "bar"
    }
    return
}

func main() {
    var a string
    var b string
	a, b = swap("hello", "world")
	fmt.Println(a, b)
    a, b = swap("foo", "world")
	fmt.Println(a, b)
}

defer
這是golang的特別功能,主要的功能是當你使用了這個語法,他就會將他後面的內容挪到你的function執行結束後才會執行(順序為由下往上的執行)

func testDefer() {
    defer fmt.Println("1")
    defer fmt.Println("2")
    defer fmt.Println("3")
    defer fmt.Println("4")
    defer fmt.Println("5")
    fmt.Println("Hello")
}
testDefer()

输出结果

Hello
5
4
3
2
1

Slice

Slice是golang獨有的資料型態,可以先把它視為可以擴充的array
他的用法如下


// 宣告
var peopleNames []string 
var peopleSex []string = []string{"male","female"}
peoplePhoneNumber := []string{"0912345678","0987654321"}

fmt.Println("peopleSex", peopleSex)
fmt.Println("peoplePhoneNumber", peoplePhoneNumber)
// 將資料放到slice
fmt.Println("peopleNames", peopleNames)
peopleNames = append(peopleNames, "Peter")
fmt.Println("peopleNames", peopleNames)
peopleNames = append(peopleNames, "John", "Eric")

// 取得slice有幾個值(length)

fmt.Println("peopleNames len", len(peopleNames))

// 取其中的值
fmt.Println("people name =>", peopleNames[1]) // John

// 對slice裡的值做迴圈操作
for index, name := range peopleNames {
    fmt.Println("index", index)
    fmt.Println("name", name)
}
// 如果你只需要slice的值,不需要index的話,就可以用_來作替代
for _, name := range peopleNames {
    fmt.Println("name", name)
}

map

在golang中,slice是用數字來代表其中每個object的位置,而map就可以透過其他屬性的內容來找到相對應的object的位置,這個會常常與未來會提到的interface一起使用,來承接json物件的東西

person := make(map[string]string)
person["name"] = "Kevin"
person["address"] = "Taipei"
x := "address"
fmt.Println(person)
fmt.Println(person["name"]) // Kevin
fmt.Println(person[x]) // Taipei

上一篇
Golang快速入門(Day4)
下一篇
Golang快速入門-3(Day6)
系列文
網頁新手入門,手把手用React/Golang(Echo)開發基礎網頁(以簡易智慧家庭為例)28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言